삼총사

NOTE

프로그래머스 · 완전탐색(조합) 배열에서 서로 다른 3명을 골라 합이 0이 되는 경우의 수를 세는 문제. i < j < k 3중 for문으로 중복 없는 조합을 생성하는 전형.

📝 문제

  • 정수 배열 number에서 서로 다른 세 원소를 골라 number[i] + number[j] + number[k] == 0을 만족하는 조합의 개수를 구한다.

💡 접근

  • 유형: 완전탐색 + 조합(Combination).
  • 3개를 중복 없이 선택하려면 인덱스가 i < j < k 관계를 만족해야 한다 → 3중 for문으로 구현.
for (i = 0 ; i < n-2 ; i++)
  for (j = i+1 ; j < n-1 ; j++)
    for (k = j+1 ; k < n ; k++)   // 배열에서 3개 조합 생성

⌨️ 풀이

public int solution(int[] number) {
 
    int count = 0;
 
    for (int i = 0; i < number.length - 2; i++) {
        for (int j = i + 1; j < number.length - 1; j++) {
            for (int k = j + 1; k < number.length; k++) {
 
                if (number[i] + number[j] + number[k] == 0) {
                    count++;
                }
            }
        }
    }
 
    return count;
}

⏱️ 복잡도

  • 시간: O(N³) — 3중 for문. 단, 문제 제한이 N ≤ 13이라 충분히 통과.
  • 공간: O(1).

📎 같은 패턴 문제

배열에서 3개를 뽑는 문제: LeetCode 3Sum, “세 수의 합/곱” 등. 원소 수가 커지면 정렬 + 투 포인터로 O(N²) 최적화 가능.


🔗 관련